package com.fyl.leetcode.binarySearch;

/**
 * @author:fyl
 * @date 2021/5/13 19:41
 * @Modified By:
 * @Modified Date:
 * @Description: 278
 * 给定一个元素 n 代表有 [1, 2, ..., n] 版本，在第 x 位置开始出现错误版本，导致后面的版本都错误。
 * 可以调用 isBadVersion(int x) 知道某个版本是否错误，要求找到第一个错误的版本。
 *
 *给定 n = 5，并且 version = 4 是第一个错误的版本。
 *
 * 调用 isBadVersion(3) -> false
 * 调用 isBadVersion(5)-> true
 * 调用 isBadVersion(4)-> true
 * 所以，4 是第一个错误的版本。
 *
 * 如果第 m 个版本出错，则表示第一个错误的版本在 [l, m] 之间，令 h = m；否则第一个错误的版本在 [m + 1, h] 之间，令 l = m + 1。
 * 因为 h 的赋值表达式为 h = m，因此循环条件为 l < h。
 */
public class FirstBadVersion {
    public int firstBadVersion(int n) {
        int low = 1;
        int high = n;
        while(low<high){
            int mid = low + ((high-low)>>1);
            if(isBadVersion(mid)){
                high = mid;
            }else{
                low = mid+1;
            }
        }
        return low;
    }

    //乱写的方法，力扣隐藏的方法
    public boolean isBadVersion(int data){
        return true;
    }
}
